#include "ptr.h"
class a
{
public:
	~a()
	{
		cout << "~a()" << endl;
	}
private:
	int c = 0;
};
void stdtest_auto_ptr()
{
	a* p = new a;
	std::auto_ptr<a> aup1(p);
	std::auto_ptr<a> aup2(new a);
	aup2 = aup1;
}
void cctest_auto_ptr()
{
	a* p = new a;
	cc::auto_ptr<a> aup1(p);
	cc::auto_ptr<a> aup2(new a);
	aup2 = aup1;
}
void stdtest_unique_ptr()
{
	std::unique_ptr<a> u1(new a);
	std::unique_ptr<a> u2(new a);
}
void cctest_unique_ptr()
{
	cc::unique_ptr<a> u1(new a);
	cc::unique_ptr<a> u2(new a);
}
void stdtest_shared_ptr()
{
	std::shared_ptr<a> s1(new a);
	std::shared_ptr<a> s2(nullptr);
	std::shared_ptr<a> s3(nullptr);
	std::shared_ptr<a> s4(nullptr);
	std::shared_ptr<a> s5(nullptr);
	std::shared_ptr<a> s6(nullptr);
	s1 = s2;
	s2 = s3;
	s3 = s4;
	s4 = s5;
	s5 = s6;
}
void cctest_shared_ptr()
{
	cc::shared_ptr<a> s1(new a);
	cc::shared_ptr<a> s2(nullptr);
	cc::shared_ptr<a> s3(nullptr);
	cc::shared_ptr<a> s4(nullptr);
	cc::shared_ptr<a> s5(nullptr);
	cc::shared_ptr<a> s6(nullptr);
	s2 = s1;
	s3 = s2;
	s4 = s3;
	s5 = s4;
	s6 = s5;
	cout << s1.getp() << endl;
	cc::weak_ptr<a> w = s1;
	cout << s1.getp() << endl;
}
int main()
{
	//stdtest_auto_ptr();
	//cctest_auto_ptr();
	//stdtest_unique_ptr();
	//cctest_unique_ptr();
	//stdtest_shared_ptr();
	cctest_shared_ptr();
	return 0;
}